/*
 * Функционал виджета: загрузка настроек виджета, удаление виджета
 *
 * @author Alexander Sibiryakov
 */
function Widget(dom_elt, init_sortable, load_js) {
	this.cp = new cpaint();
	this.initParams = function(dom_elt) {
		if (!dom_elt) {
			this.view = new WidgetView( jQuery("#"+this.wid) );
		} else {
			this.view = new WidgetView(dom_elt);
		}
		this.wid = this.view.getId();
	}

	this.bind = function() {

		// вешаем обработчики
		var edit = this.view.getEditLink();
		if (edit) jQuery(edit).bind("click", this, this.openSettings);

		var del = this.view.getDelLink();
		if (del) jQuery(del).bind("click", this, this.remove);

		jQuery(this.view.getWidgetUpElt).bind("widgetUpdated", this, this.onUpdate);

		this.view.bindHover();

	}

	this.remove = function(event) {
		event.preventDefault();
		var obj = event.data;
		obj.cp.set_env_object(obj);
		obj.cp.call(get__Url('/ajax'), 'ajax_deleteWidget', function(result) {
			this.view.remove();
		}, obj.wid );
	}

	this.update = function() {
		this.cp.set_env_object(this);
		this.cp.call(get__Url('/ajax'), 'ajax_renderWidget', function(result) {

			this.view.replaceWith(result.ajaxResponse[0].html[0].data);

			this.initParams(null);
			this.initSortable();
			this.bind();
		}, this.wid);
	}

	this.onUpdate = function(event) {
		event.preventDefault();

		var obj = event.data;
		obj.update;
	}

	this.openSettings = function(event) {
		event.preventDefault();
		var obj = event.data;
		this.panel = new SettingsPanelLoader(obj.wid, obj.view.getSetJsUrl());
		this.panel.popup();
	}

	this.loadJs = function() {
		var url = this.view.getFrontJsUrl();

		// подгрузка js кода фронтэнда виджета
		if (url) {
			$.getScript(url);
		}
	}

	this.initSortable = function() {
		var widget = document.getElementById(this.wid);
		var column = this.view.getColumn();
		jQuery(column).SortableAddItem( widget );
	}

	this.initParams(dom_elt);
	this.bind();

	if (load_js) {
		this.loadJs();
	}

	if (init_sortable) {
		this.initSortable();
	}

}

/*
 * Подгрузчик панели опций: делает вставку в dom, и подгрузку js кода
 */
function SettingsPanelLoader(wid, js_url) {
	this.wid = wid;
	this.js_url = js_url;

	this.popup = function() {
		var cp = new cpaint();
		cp.set_env_object(this);
		cp.call(get__Url('/ajax'), 'ajax_getSettingsHtml', function(result) {
				// вставка html кода виджета
				dctrl.backgroundOn();
				dctrl.view.addSettingsPanel(result.ajaxResponse[0].data);
				
				// подгрузка js кода настроек виджета
				if (this.js_url) $.getScript(this.js_url);

		}, this.wid );
	}

}



